using System;
using System.Collections.Generic;
using System.Text;
using Estructuras.Comunes;

namespace Estructuras.Consola.ConsolaEjecutarAplicacion
{
    class ConsolaEjecutarAplicacion
    {
        static int Main(string[] args)
        {
            try
            {
                Console.Error.WriteLine(Constantes.MensajeComponente + CEjecutarAplicacion.NodoRaiz);
                Console.Error.WriteLine(Constantes.MensajeInicio + DateTime.Now.ToLocalTime());
                if (args.Length != 1)
                    throw new Excepcion(Constantes.ERROR_NUMERO_PARAMETROS_ENTRADA, Constantes.CODIGO_ERROR_NUMERO_PARAMETROS_ENTRADA);

                PEjecutarAplicacion propiedades = new PEjecutarAplicacion();
                propiedades.leer(args[0]);

                try
                {
                   Estructuras.Funciones.Ejecutar.Ejecutar.EjecutarAplicacion(propiedades.Aplicacion, propiedades.Parametros);
                }
                catch (Excepcion ex)
                {
                    throw new Excepcion(Constantes.ERROR_EJECUCION + ex.Message, ex, ex.Codigo);
                }
                catch (Exception ex)
                {
                    throw new Excepcion(Constantes.ERROR_EJECUCION + ex.Message, ex, Constantes.CODIGO_ERROR_EJECUCION);
                }
                Console.Error.WriteLine(Constantes.MensajeFin + DateTime.Now.ToLocalTime());
                return Constantes.EJECUCION_OK;
            }
            catch (Excepcion ex)
            {
                Console.Error.WriteLine(ex.Message);
                return ex.Codigo;
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine(ex.Message);
                return Constantes.EJECUCION_ERROR;
            }
        }
    }
}
